home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’90 / DataStack Filer / LocLib.Mod < prev    next >
Encoding:
Modula Implementation  |  1995-09-10  |  1.5 KB  |  65 lines  |  [TEXT/MPS ]

  1. IMPLEMENTATION MODULE LocLib;
  2. (*    Copyright:    © 1990 by Keith Nemitz, all rights reserved. *)
  3. FROM SYSTEM IMPORT ADR;
  4.  
  5. FROM MacTypes IMPORT OSErr;
  6. FROM FileManager IMPORT PBHGetVInfo,HParamBlockRec;
  7.  
  8. PROCEDURE FreeSpaceOnVol(vRef:INTEGER; VAR freeBytes:LONGINT): OSErr;
  9. VAR         
  10.     freeBlocks :LONGINT;   
  11.     HPB :HParamBlockRec;       
  12.     err :OSErr;
  13. BEGIN                
  14.     freeBytes := 0;
  15.     WITH HPB DO                 (* set up parameter block for the PBGetVInfo call *)
  16.         ioNamePtr := NIL;        (* we don’t care about the name *)
  17.         ioVRefNum := vRef;    (* this was passed in as a parameter *)
  18.         ioVolIndex := 0;        (* use ioVRefNum only *)
  19.         END; (*with*)
  20.     err := PBHGetVInfo(ADR(HPB),FALSE);
  21.  
  22.     IF err = 0 THEN
  23.         freeBlocks := VAL(LONGINT,VAL(CARDINAL,HPB.ioVFrBlk));
  24.         freeBytes := freeBlocks * HPB.ioVAlBlkSiz;
  25.         END;
  26.     RETURN err;
  27.     END FreeSpaceOnVol;
  28.  
  29.  
  30.  
  31. PROCEDURE BinarySearch(min,max:CARDINAL):CARDINAL;
  32. VAR
  33.     indx :CARDINAL;
  34.     n :INTEGER;
  35. BEGIN
  36.     IF max < min THEN RETURN 0; END;
  37.     
  38.     indx := (min+max) DIV 2;
  39.     n := theSearcher(indx);
  40.     IF n = 0 THEN                                    (* theSearchX matches (indx)^. *)
  41.         RETURN indx; 
  42.     ELSIF n < 0 THEN                                (* theSearchX preceeds (indx)^. *)
  43.         RETURN BinarySearch(min,indx-1);
  44.     ELSE                                                (* theSearchX follows (indx)^. *)
  45.         RETURN BinarySearch(indx+1,max);
  46.         END;
  47.     END BinarySearch;
  48.  
  49.  
  50. PROCEDURE CopyStr(max :INTEGER; VAR src,dst :ARRAY OF CHAR);
  51. VAR i :INTEGER;
  52. BEGIN
  53.     IF HIGH(src) < max THEN
  54.         max := HIGH(src);
  55.         END;
  56.     IF HIGH(dst) < max THEN
  57.         max := HIGH(dst);
  58.         END;
  59.     FOR i := 0 TO max DO
  60.         dst[i] := src[i];
  61.         END;(*for*)
  62.     END CopyStr;
  63.  
  64. END LocLib.
  65.